package Day014_Lambda表达式_Stream流.dem01_Lambda表达式.demo3_Lambda表达式前提和场景;

/**
 * @author zhangyan
 * @date 2020/5/5 10:17
 */
/*
    Lambda的前提条件：    当接口是函数式接口时,就可以用Lambda表达式表示该接口的实现类对象
            1. 使用Lambda必须具有接口，且要求接口中有且仅有一个抽象方法 (其他的默认 私有 静态方法没有影响)

            2. 使用Lambda必须具有上下文推断。 也就是方法的参数或局部变量类型必须为Lambda对应的接口类型，才能
            使用Lambda作为该接口的实例。

            如果一个接口中只有一个抽象方法,那么这个接口就可以叫做函数式接口,可以用 @FunctionalInterface 注解标识

    Lambda的表现形式:
                    变量形式
                    参数形式
                    返回值形式
 */
public class Test {
    public static void main(String[] args) {

        /*Runnable r = new Runnable() {
            @Override
            public void run() {
                // 代码
            }
        };*/

        //变量形式
        Runnable r = ()->{ System.out.println("Lambda表达式1"); };
        new Thread(r).start();

        //参数形式
        new Thread(()->{ System.out.println("Lambda表达式2"); }).start();

        //返回值形式
        Runnable r2 = getRunnable();
        new Thread(r2).start();
    }
    public static Runnable getRunnable(){
        return ()->{System.out.println("Lambda表达式3");};
    }
}
